'''
函数的学习总结：
    在python中，有句话叫一切皆对象！
    下面代码编写的流程是：
    1.导入函数reduce
    2.定义一个函数wrapper，在wrapper函数中定义一个可迭代对象alist和函数lazy_sum
    3.用laxy_sum变量指向wrapper的返回值lazy_sum()函数
    4.判断全局变量是否相等
    5.打印laxz_sum()的执行结果

    执行的主要过程是：
    1.判断全局变量__name__等于'__main__'
    2.判断执行打印语句，打印内容是lazy_sum(),这是打印lazy_sum函数的调用结果。
    3.从lazy_sum = wrapper() 可以看出lazy_sum函数就是wrapper函数的调用结果
    4.wrapper函数的调用结果是返回wrapper函数的子函数lazy_sum
    5.也就是说外部的函数lazy_sum就是wrapper内部的lazy_sum函数，最后打印的就是wrapper内部lazy_sum函数的调用结果
    6.wrapper内部的lazy_sum(简称lazy1)函数执行后直接返回了一个reduce函数结果
    7.reduce的执行结果是将alist中的所有元素相加得到值
    8.所以最后打印的结果就是1-100的累加和。
'''
from functools import reduce
def wrapper():
    alist = range(1, 101)
    def lazy_sum():
        return reduce(lambda x, y: x+y, alist)
    return lazy_sum
lazy_sum = wrapper() #wrapper() 返回的是lazy_sum函数对象
if __name__ == "__main__":
    print(lazy_sum())
